﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using Gra.Seguros.Servicio.Be;

namespace Gra.Seguros.Servicio.Dalc
{
    public class CotizacionPersonalDalc : IDisposable
    {
        #region "Procedimientos Consultas"
            public List<CotizacionPersonalBe> listar(int _cCotizacion)
            {
                try
                {
                    List<CotizacionPersonalBe> lst = new List<CotizacionPersonalBe>();
                    using (SqlCommand oCommand = new SqlCommand("uspListarCotizacionPersonal", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add("@cCotizacion", SqlDbType.Int).Value = _cCotizacion;
                        using (SqlDataReader drListado = oCommand.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection))
                        {
                            if (drListado.HasRows)
                            {
                                while ((drListado.Read()))
                                {
                                    CotizacionPersonalBe obj = new CotizacionPersonalBe();
                                    obj.cCotizacion = drListado.GetInt32(drListado.GetOrdinal("cCotizacion"));
                                    obj.nItem = drListado.GetInt32(drListado.GetOrdinal("nItem"));
                                    obj.sTieneHijos = drListado.GetBoolean(drListado.GetOrdinal("sTieneHijos"));
                                    obj.sCubreFamilia = drListado.GetBoolean(drListado.GetOrdinal("sCubreFamilia"));
                                    obj.nEdad = drListado.GetInt16(drListado.GetOrdinal("nEdad"));
                                    obj.EstadoCivil.cEstadoCivil = drListado.GetInt32(drListado.GetOrdinal("cEstadoCivil"));
                                    obj.LugarCobertura.cLugar = drListado.GetInt32(drListado.GetOrdinal("cLugar"));
                                    obj.Ramo.cRamo = drListado.GetInt32(drListado.GetOrdinal("cRamo"));
                                    obj.Ramo.oTipoSeguro.cTipoSeguro = drListado.GetInt32(drListado.GetOrdinal("cTipoSeguro"));
                                    lst.Add(obj);
                                }
                            }
                        }
                    }

                    return lst;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        #endregion

        #region "Procedimientos Mantenimientos"
            public string registrarCotizacionPersonalPersonaNatural(CotizacionBe _objCab, CotizacionPersonalBe _objDet)
            {
                string vReturn = string.Empty;
                try
                {
                    using (SqlCommand oCommand = new SqlCommand("uspRegistrarCotizacionPersonalPersonaNatural", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add(new SqlParameter("@cTipoDocumento", SqlDbType.VarChar, 4)).Value = _objCab.Cliente.TipoDocumento.cTipoDocumento;
                        oCommand.Parameters.Add(new SqlParameter("@nNroDocumento", SqlDbType.VarChar, 15)).Value = _objCab.Cliente.nNroDocumento;
                        oCommand.Parameters.Add(new SqlParameter("@cGenero", SqlDbType.Int)).Value = _objCab.Cliente.Genero.cGenero;
                        oCommand.Parameters.Add(new SqlParameter("@cEstadoCivil", SqlDbType.Int)).Value = _objCab.Cliente.EstadoCivil.cEstadoCivil;
                        oCommand.Parameters.Add(new SqlParameter("@dNomCliente", SqlDbType.VarChar, 50)).Value = _objCab.Cliente.dNomCliente;
                        oCommand.Parameters.Add(new SqlParameter("@dApeRazonCliente", SqlDbType.VarChar, 50)).Value = _objCab.Cliente.dApeRazonCliente;
                        oCommand.Parameters.Add(new SqlParameter("@dTelefDomicilio", SqlDbType.VarChar, 15)).Value = _objCab.Cliente.dTelefDomicilio;
                        oCommand.Parameters.Add(new SqlParameter("@dCorreoElectronico", SqlDbType.NVarChar, 120)).Value = _objCab.Cliente.dCorreoElectronico;
                        oCommand.Parameters.Add(new SqlParameter("@cDepartamento", SqlDbType.Int)).Value = _objCab.Cliente.Departamento.cDepartamento;
                        oCommand.Parameters.Add(new SqlParameter("@cRamo", SqlDbType.SmallInt)).Value = _objCab.Ramo.cRamo;
                        oCommand.Parameters.Add(new SqlParameter("@cEjecutivo", SqlDbType.Int)).Value = _objCab.Ejecutivo.cEjecutivo;
                        oCommand.Parameters.Add(new SqlParameter("@sTieneHijos", SqlDbType.Bit)).Value = _objDet.sTieneHijos;
                        oCommand.Parameters.Add(new SqlParameter("@sCubreFamilia", SqlDbType.Bit)).Value = _objDet.sCubreFamilia;
                        oCommand.Parameters.Add(new SqlParameter("@nEdad", SqlDbType.SmallInt)).Value = _objDet.nEdad;
                        oCommand.Parameters.Add(new SqlParameter("@cEstadoCivil_cp", SqlDbType.Int)).Value = _objDet.EstadoCivil.cEstadoCivil;
                        oCommand.Parameters.Add(new SqlParameter("@cLugarCobertura", SqlDbType.Int)).Value = _objDet.LugarCobertura.cLugar;
                        oCommand.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.VarChar, 500)).Direction = ParameterDirection.Output;
                        oCommand.ExecuteNonQuery();
                        vReturn = Convert.ToString(oCommand.Parameters["@RETURN_VALUE"].Value);
                    }
                    return vReturn;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public string actualizarCotizacionPersonal(CotizacionPersonalBe _objDet)
            {
                string vReturn = string.Empty;
                try
                {
                    using (SqlCommand oCommand = new SqlCommand("uspActualizarCotizacionPersonal", oCn))
                    {
                        oCommand.CommandType = CommandType.StoredProcedure;
                        oCommand.Parameters.Add(new SqlParameter("@cCotizacion", SqlDbType.Int)).Value = _objDet.cCotizacion;
                        oCommand.Parameters.Add(new SqlParameter("@NroItem", SqlDbType.Int)).Value = _objDet.nItem;
                        oCommand.Parameters.Add(new SqlParameter("@sTieneHijos", SqlDbType.Bit)).Value = _objDet.sTieneHijos;
                        oCommand.Parameters.Add(new SqlParameter("@sCubreFamilia", SqlDbType.Bit)).Value = _objDet.sCubreFamilia;
                        oCommand.Parameters.Add(new SqlParameter("@nEdad", SqlDbType.SmallInt)).Value = _objDet.nEdad;
                        oCommand.Parameters.Add(new SqlParameter("@cEstadoCivil_cp", SqlDbType.Int)).Value = _objDet.EstadoCivil.cEstadoCivil;
                        oCommand.Parameters.Add(new SqlParameter("@cLugarCobertura", SqlDbType.Int)).Value = _objDet.LugarCobertura.cLugar;
                        oCommand.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.VarChar, 500)).Direction = ParameterDirection.Output;
                        oCommand.ExecuteNonQuery();
                        vReturn = Convert.ToString(oCommand.Parameters["@RETURN_VALUE"].Value);
                    }
                    return vReturn;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        #endregion

        #region "Constructor & Disposable"
            private bool _disposed = false;
            SqlConnection oCn = null;
            public CotizacionPersonalDalc()
            {
                string strConnection = ConfigurationManager.ConnectionStrings["dbSeguros"].ConnectionString;
                oCn = new SqlConnection(strConnection);
                oCn.Open();
            }

            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            protected virtual void Dispose(bool disposing)
            {
                if (!_disposed)
                {
                    if (disposing)
                    {
                        //Dispose managed resources here. llamar componetes de conexion u otros.                        
                        if (oCn.State != ConnectionState.Closed)
                        {
                            oCn.Close();
                        }
                        oCn.Dispose();
                    }
                    //Disposed unmanaged resources here.
                    //set the _disposed flag to prevent subsequent disposals.
                    _disposed = true;
                }
            }
            //Finalization code.
            ~CotizacionPersonalDalc()
            {
                Dispose(false);
            }
        #endregion
    }
}
